#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;



int M[5][5] =
{{0,10,2,0,10},
{0,INF,INF,INF,INF},
{INF,INF,0,2,INF},
{INF,INF,INF,0,3},
{INF,INF,INF,INF,0}};

int dis[5] = {INF,INF,INF,INF,INF};
int mark[5] = {-1,-1,-1,-1,-1};
int s[5];
int n = 5;
void Dijkstra(int u)
{
	for(int i = 0; i < 5; i++)
	{
		//s[i] = 0;
		dis[i] = M[u][i];
	}
	s[u] = 1;

	for(int i = 1; i < 5; i++)
	{
		int Min = INF, v = u;
		for(int j = 0; j < n; j++)
		{
			if(!s[j] && dis[j] < Min)
			Min = dis[j],v = j;
		}
		s[v] = 1;
		for(int j = 0; j < n; j++)
		{
			if(!s[j] && dis[v] + M[v][j] < dis[j])
				dis[j] = dis[v] + M[v][j];
		}

	}	
}



int main()
{
	Dijkstra(0);
	for(int i = 0; i < n; i++)
		printf("%d%c",dis[i],(i == n-1 ? '\n':' '));

	return 0;
}
